(function () {
  // 描述一个对象类型
  type myType = {
    name: string;
    age: number;
  };

  /**
   * 接口用来定义一个类结构，用来定义一个类中应该包含哪些属性和方法
   * 同时接口可以当成类型声明使用
   * 可以同时写两个接口，接口可以限制类的结构
   */
  interface myInterface {
    name: string;
    age: number;
  }

  interface myInterface {
    gender: string;
  }

  const obj: myInterface = {
    name: "张三",
    age: 18,
    gender: "男",
  };

  /**
   * 接口实际上是定义了一个规范
   * 接口可以在定义类的时候去限制类的结构
   * 接口中的属性都不能有实际的值
   * 接口只定义对象的结构，而不考虑实际值
   * 在接口中所有的方法都是抽象方法，不能有实际的值
   */
  interface myInter {
    name: string;
    sayHello(): void;
  }

  /**
   * 定义类时，可以使类去实现一个接口
   * 实现接口就是使类满足接口的要求
   * extends是继承 implements是实现
   */

  class MyClass implements myInter {
    name: string;
    constructor(name: string) {
      this.name = name;
    }
    sayHello(): void {
      console.log("大家好~~");
    }
  }
})();
